Data processing systems which allow for multiple concurrent processes have been known for years. For example, multi-user systems employing mainframe computers with remote terminals include IBM VM and MVS systems. These systems allow for multiple processes on a single computer system. As a result, the hardware and/or software resources of the data processing system may be shared across multiple users or multiple processes. Examples of shared resources in a data processing system include main storage, data buffer pools in main storage, processors, disk/Direct Access Storage Devices (DASD), cache, and network communication adapters.
Utilization of a shared resource may be illustrated by use of a protocol stack in a data processing system. A protocol stack is a layered protocol in a data processing system which may be used by an application running on a data processing system in order to communicate with other applications or users across a communication network. In a communication protocol stack, application data may reside in user or a shared storage area for multiple applications on the data processing system. The application data may be copied to a protocol buffer which also may use main storage of the data processing system. Headers/trailers may be added to the data by various layers of the protocol stack and this information is stored in buffers in main storage. The data may also be processed by the stack for compression/encryption/segmentation and this information also stored in buffers. In addition all of the information necessary for the operation of the protocol stack is also resident in main storage buffers. The data may also be queued for transmission out of the data processor through a network interface.
As is seen in the communications protocol stack example, multiple aspects of the stack may utilize shared memory resources. Thus, throughout the utilization of the protocol stack, shared resources are consumed and made available as the protocol stack performs its operations. Furthermore, more than one instance of the stack may be present on a data processing system such that multiple stacks compete for the available resources. As a protocol stack or protocol stacks perform their operations, the utilization of the shared resource may increase and decrease depending on the data passing through the stack, the operations performed at a specific time by the stack, and the number of concurrent operations. This variable and unpredictable utilization of shared resources may result in over-utilization of the resource such that when a stack seeks to store information in a buffer, no buffer is available.
One previous mechanism to avoid buffer over-utilization was to establish a fixed buffer utilization threshold. If the utilization of the resource exceeded this threshold only high priority requests could obtain buffers. The users of the buffers could not cooperatively work with the storage manager to alleviate the buffer shortage condition. Even with a cooperative mechanism using fixed thresholds, when the buffer utilization exceeded the threshold, a flag was set by the storage manager which could be used by the users of the buffers to reduce the utilization of the buffers. However, a fixed threshold may result in under-utilization of the buffers if the threshold is set too low or may still result in over-utilization or failures if the threshold is set too high. Furthermore, the use of the buffers may be "bursty" in that the data is not provided at a constant rate. If the peak of a burst of data exceeds the threshold, then the over-utilization flag may be set. This may cause a reduction in the use of the buffers when, in fact, more buffers could be utilized. Additionally, if the threshold is exceeded early in the burst of data, then the users of a shared resource may not be informed quickly enough to avoid the over-utilization.
In light of the above discussion, a need exists for improvements in the control of shared resources in computer systems. More particularly, a need exists for controlling the use of shared buffers in memory of data processing systems.